在线学习在爱奇艺信息流推荐业务中的探索与实践
▌概述
爱奇艺的信息流推荐业务每天会产生数十亿规模的feed浏览,如此大规模的数据给模型训练带来了很大的挑战。同时,信息流这类用户与推荐系统的强交互场景也引入了很多有趣的研究课题。对于信息流推荐产品来说,用户和产品交互性高,用户兴趣变化也很快。若模型不能及时更新,排序模型部署上线后,性能会缓慢下降。而对于排序模型来说,如何用较低成本完成百亿样本、千亿参数DNN排序模型的及时更新是需要解决的首要问题。
引入在线学习是解决此类问题的首选方式。在线学习(Online Learning)能捕捉用户的动态行为模式,实现模型的快速自适应,它对数据pipeline的稳定性、流式样本的分布纠偏、模型训练的稳定性以及模型部署的性能都提出了很高的要求,成为提升推荐系统性能的利器。在线学习为爱奇艺多个信息流推荐场景都带来了明显的效果增益,对新内容的分发也起到了明显正向的作用,验证了“唯快不破”的真理。
本文就来介绍一下爱奇艺技术团队我们的相关成功实践。基于学术界和工业界的经验,探索出一套比较适合工业化实践的W&D深度排序模型的在线学习范式,实现了消费流式数据、DNN模型的实时训练和及时更新。
在短视频信息流推荐和图文信息流推荐方面,完成了AB实验和全流量上线,推荐效果和用户体验较之前的离线模型都获得了较大的提升,短视频信息推荐消费指标+1.5%,图文信息流推荐消费指标+3.8%。此外,数据证明在线学习的上线对于新内容的分发有比较明显的助益,也能在新内容上线当天进行快速试探,判别内容的优劣。以图文信息流推荐为例,新Feed的平均分发量增益在10%以上,而且这些feed的点击率也有明显提升。▌信息流推荐排序模型目前的挑战
目前,业界主流的信息流个性化推荐的排序模型目前基本都已转向DNN模型,如W&D、DeepFM等,相比以往以GBDT/LR/FM为典型模型的浅层模型来说, 产生了下面几个新的问题:
从上面可以看出,要完成一个DNN模型的实时更新并非易事。而在传统机器学习时代,只需要给模型最新的数据,通过在线学习算法(如FTRL)做到模型的实时更新,实现了浅层模型的实时更新[3,4,6]。在线学习需要的数据,训练资源都明显低于离线训练场景。
▌DNN模型的在线学习挑战
DNN模型的在线学习不能直接硬搬LR+FTRL,主要的挑战如下几方面:
▌DNN模型的在线学习业界的解决方案
以阿里XPS为例,基于C++实现了动态扩缩容的embedding lookup算子,底层是基于C++实现的XPS-ArrayHashMap,支持ID特征的增删, 自适应的解决了OOV问题。其针对DNN模型,提出了XNN深度学习算法,自适应于streaming data的深度模型训练。
▌现有的模型结构及训练范式介绍
参考已有的业界的实践,我们基于公司的深度模型训练平台,实现了在线学习在短视频信息流和图文信息流推荐的成功落地,下面介绍关于爱奇艺的实践方案:
1.主模型结构
这是一个W&D模型变种,但是Wide侧和Deep侧是各自经过一个FM后再进行结果融合:
Deep的输入包括Embedding特征和Dense特征, Wide侧包括GBDT叶子节点,ID类的Sparse 特征, Embedding特征和Dense特征; GBDT的输入主要是以统计特征为代表的Dense特征, 是一种基于模型的显示特征组合; DNN的优化器是Adam, Wide侧优化器是FTRL; 基于公司内部的深度学习平台训练离线模型。
2.现有的模型迁移到在线学习的局限
DNN部分迁移到在线学习,可能不像wide侧线性模型那么容易收敛。对于DNN深度模型的在线学习优化,目前还没有成熟的优化器,FTRL更适合线性简单模型; GBDT不适合增量/在线学习; 在线学习训练持续running的情况下,Wide侧的输入ID特征,在线学习训练持续running的情况下, oov几率会显著提升。
▌训练范式
1.在线学习+离线模型热启动的范式
爱奇艺技术团队通过实践探索,形成了一个比较成熟的在线学习框架——在线学习+离线模型热启动的范式。这里来先介绍下框架:
左侧是在线学习,右侧是离线学习:离线训练仍然保留,它基于7天历史数据训练,主要是用于在线学习模型每天的热启动重启。在线学习消费Kafka实时数据流,实时训练模型; 数据实时化:在线学习的数据流从用户行为数据到模型训练样本的生产都是在线进行的,实现了样本、特征和时长数据的在线Join, 数据流都通过Kafka 向后传递; 模型训练实时化:在线训练任务消费训练数据的Kafka Topic,且只消费一次(one pass)。模型除了每天基于最新离线模型热启动重启一次,当天都是long running的; 模型同步:模型按小时例行化导出模型文件同步给引擎,这里的同步效率可以自行调节。
以图文信息流推荐为例,在线学习引入前后的整体数据流图如下:
2.数据实时化难点
多路实时数据的在线Join,包括用户行为数据, 特征等。 样本归因。因为行为上报的天然串行化,会导致Label的滞后性:用户展示行为<< 用户点击行为<< 用户播放日志。同一个用户在同一个feed上产生的展示数据和点击数据先后到达时,需要确定如何归因样本label和更新模型。
▌样本归因实践
一个视频item上的负样本一般会先到达,后续同样视频上的正样本到达,对于这两个样本在流式到达时如何处理并更新模型,目前有两种范式:
Facebook的做法[34]:负样本会先cache, 等待潜在的正样本到达,若后续正样本到达,则只保留正样本,更新模型一次。
Twitter的做法[3]:两条样本都会保留,都会去更新模型,这样实时性最高。
我们对两种方法都进行了尝试,结论是后者更适合现有的工程架构,通过loss修正效果上并不弱于前者。
2.实践逻辑及困难解决
负样本Cache策略:最终确定的Cache窗口为10分钟,基于impression和vv的时间差分布统计,10分钟的窗口内有点击的impression和vv的join成功率达90%+。
基于Cache 窗口的Join逻辑示意图如下:
假定时间窗口大小t1是20min,cache保留窗口t1’是10min:
第一个时间窗口,我们结合t1和t1'来统计信息,即label的归因;
第二个时间窗口,我们结合t1',t2和t2'来统计label。
没有cache, 每条最新样本都去更新模型,这样会存在False Negative或者说无法确定Label的样本也更新了模型这样的问题。Twitter 2019最新的一篇论文[6]提出了如何在进行纠正,主要包括以下四种方法:
样本重要性采样(importance sampling):机器学习模型一般是假设样本符合一个特定数据分布,模型训练就是一个搜索最佳的数据分布参数的过程。观察到实时样本流样本分布由于包含了FN样本,其实是一个有偏的分布。类似于强化学习等场景,会使用到重要性采样方法对给予每个观察到的样本权重进行纠正,近似一个无偏数据分布。
FN矫正:模型拟合当前观察到的有偏分布b, 经过论文推导,无偏预测p(y|x) 和有偏预测b(y|x)的关系如下。因此用包含FN的实时样本训练模型b后,预测时用下面的公式进行矫正即可。
PU loss (Positive-unlabeled loss): 本质就是认为所有观察到的负样本都是unlabeled. 因此对loss进行了如下改造,核心思想就是在观察到一个实例的正样本到达时,除了使用正样本进行梯度下降,还会对相应的负样本进行一个反向的梯度下降,抵消之前观察到的FN样本对loss的影响。
延迟反馈Loss: 使用一个额外的模型去建模当前样本的真实Label确定时的时间延迟,基于当前样本距离上次展示的时间距离去评估当前样本的Label,是一个true label的概率。这个时间延迟模型和pCTR模型联合训练,优化loss如下,其中Wd就是时间延迟模型的参数。
我们尝试了上面的第二种和第三种方法,目前线上使用的版本是第三种方法,论文实验中效果最好的是第二种方法,这个可能和业务数据分布不一致有关。
▌模型实时化
在线学习场景下模型结构虽然和基线一致,但训练方式和离线训练存在一些不同:
▌效果调优经验分享
典型的在线学习对于训练数据的消费是One Pass的,而离线模型的训练是multi-pass。从优化角度讲,深度模型的在线学习是要解决在线非凸优化问题。FTRL本身是一个适合在线学习的优化器。离线模型的wide侧实际上已经是FTRL, 只有DNN部分是Adam。我们尝试过把DNN部分的优化器也变为FTRL,但效果是负向的,FTRL比较适合稀疏线性模型的在线学习; 按小时例行的更新模型 vs 当模型性能超过基线时才更新模型:前者对于点击率的指标更有利,该策略下uctr正向明显。持续更新模型,能推出用户最近感兴趣的内容,点击率容易高; 模型长期不热启动重置,效果是呈现下降的趋势; 在线训练消费样本的轮数,我们做了下实验对比,过多遍会更好一些,这可能要结合实际业务数据进行优化。
▌实践效果
下图给出了短视频信息流产品推荐当天累积测试集的离线模型和在线学习每个小时推出的在线模型的auc/wauc对比,在线学习在当天测试集上表现优于离线模型。
1.累积测试集:每个小时实时样本流不放回抽样1.5% 加入累积测试集。T-1小时的模型预测T+1 hour的数据,在线学习AUC是基于每个小时测试集的累积预测结果计算。
2.离线模型:基于历史7天数据训练的离线模型,同时用于当天在线学习的热启动。
在图文信息流推荐产品上,我们论证了实时特征+在线学习的组合更能发挥出实时特征的最大化效果。下图是三个实验的多天在线AUC走势,可见实时特征+在线学习的AUC明显高于基线,优于实时特征+离线训练的组合。
▌后续优化
作为特征交叉组合的GBDT组件不太适合在线学习,后续切换模型为端到端的深度模型,去掉对GBDT的依赖。 探索更适合在线学习范式的深度模型和优化器,如[2]中的方法,在线学习的过程中自适应调整模型的深度,模型结构由浅向深的进行进化,避免模型过深带来的收敛慢和模型过浅带来的欠拟合。 尝试对实时数据流中的ID进行频次过滤,高维数据中大部分特征都是稀疏的,有必要进行低频过滤,离线有做这方面的内容,但在线学习还没有进行实践,如[1, 5]中的方法: 柏松分布或Bloom Filter。 探索更高频率的更新模型,如半小时、分钟级。
参考文献:
end
也许你还想看